\section{用SageMath计算举例}

\begin{frame}[fragile]{模运算}

  \mintinline{sage}{IntegerModRing(n)} 用于定义整数模 $n$ 的同余类环 $\ZZ/n\ZZ$.

\begin{minted}[texcl]{sage}
sage: R = IntegerModRing(385)  # 定义 $\ZZ/385\ZZ$
sage: a=R(12);b=R(5)  # 定义 $12, 5$ 的同余类，$R(n)$ 会返回模$385$的最小非负剩余
sage: a^-1  # 求 $a$ 的逆
353
sage: b/a  # 计算 $b$ 除以 $a$
225
sage: a^123467890  # 计算幂
254
sage: a.modulus()  # 查询 $a$ 的模
385
sage: a.is_square()  # $a$ 是否为二次剩余
False
\end{minted}

\end{frame}

\begin{frame}[fragile]{Euler $\varphi$函数}

\mintinline{sage}{euler_phi(n)} 为Euler $\varphi$函数。

\begin{minted}[texcl]{sage}
sage : euler_phi (36)
12
sage : 3^ euler_phi (10) % 10 == 1
True
\end{minted}

我们知道 $(a,m)=1$时$a^{\varphi(m)}=1$.
\end{frame}

\begin{frame}[fragile]{同余方程}

  \mintinline{sage}{crt([b1, ..., bs], [m1, ..., ms])} 用于找到线性同余方程组
  \[
    x\equiv b_1\left( \mod m_1 \right), \quad \cdots,\quad x\equiv b_s\left( \mod m_s \right)
  \]
  的一个解。
 
\begin{minted}[texcl]{sage}
sage: crt([2,3,2],[3,5,7])
23
sage: crt([7,1],[12,10])
31
\end{minted}

可通过调用多项式的 \mintinline{sage}{roots()} 方法求单个多项式的根。

\begin{minted}[texcl]{sage}
sage: R.<x>=IntegerModRing(5)[]
sage: f=x^4+12*x^3+13*x+4
sage: f.roots()
[(1, 1), (4, 3)]
sage: R.<x>=IntegerModRing(15)[] 
sage: f=x^4+12*x^3+13*x+4
sage: f.roots(multiplicities=False)
[1, 4]
\end{minted}

这里注意到$\ZZ/15\ZZ[x]$不是唯一因子分解整环，故不能谈多项式的根的重数，
需要指定 \mintinline{sage}{multiplicities=False}.
\end{frame}
